package com.zenithmind.chat.pojo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 聊天消息媒体信息实体类 - 遵循单一职责原则
 * 专门负责消息的媒体文件信息
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("chat_message_media")
public class ChatMessageMedia extends BaseEntity {

    /**
     * 消息ID
     */
    private String messageId;

    /**
     * 媒体文件URL
     */
    private String mediaUrl;

    /**
     * 媒体文件名称
     */
    private String fileName;

    /**
     * 媒体文件大小（字节）
     */
    private Long fileSize;

    /**
     * 媒体文件类型（MIME类型）
     */
    private String mimeType;

    /**
     * 媒体文件时长（秒，语音、视频使用）
     */
    private Integer duration;

    /**
     * 缩略图URL
     */
    private String thumbnailUrl;

    /**
     * 图片宽度（图片类型使用）
     */
    private Integer width;

    /**
     * 图片高度（图片类型使用）
     */
    private Integer height;

    /**
     * 文件MD5值（用于去重）
     */
    private String fileMd5;

    /**
     * 上传状态（0-上传中，1-上传成功，2-上传失败）
     */
    private Integer uploadStatus;

    /**
     * 存储路径
     */
    private String storagePath;

    /**
     * 扩展信息（JSON格式）
     */
    private String extraInfo;

    /**
     * 检查是否为图片类型
     * 
     * @return 是否为图片
     */
    public boolean isImage() {
        return mimeType != null && mimeType.startsWith("image/");
    }

    /**
     * 检查是否为视频类型
     * 
     * @return 是否为视频
     */
    public boolean isVideo() {
        return mimeType != null && mimeType.startsWith("video/");
    }

    /**
     * 检查是否为音频类型
     * 
     * @return 是否为音频
     */
    public boolean isAudio() {
        return mimeType != null && mimeType.startsWith("audio/");
    }

    /**
     * 检查上传是否成功
     * 
     * @return 是否上传成功
     */
    public boolean isUploadSuccess() {
        return uploadStatus != null && uploadStatus == 1;
    }
}
